# 集合是一个无序， 可变， 不允许元素重复的容器
# 无序的意思就是不支持索引操作
# 可变的意思就是可以添加和修改
d1 = {1,'ads','我爱你'}

# 集合的定义
s1 = set() # 空集合
# 不可以s1 = {}  # 这是定义一个空字典

# 空列表
v1 = []
v1 = list()

# 空元祖
v1 = ()
v1 = tuple()

# 空字典
v1 = {}
v1 = dict()

# 类型转换
# int/tuple/list/dict都可以转为集合
# 集合可以转list/tuple
name = 'abnfsjkmdkl'
s = set(name)
print(s)

'''
底层原理
v1 = set()
v1.add("wupeiqi")
第一步利用哈希函数将‘wupeiqi’转换成一个数值，例如4841515212
第二布取余数（实际掩码做&运算）  4841515212 % 7 =3
第三步将‘wupeiqi’放在哈希表的 3 索引位置

'''



# 集合元素必须可哈希
# 目前可哈希的数据类型：int,bool,str,tuple,  而list,dict,set是不可哈希的
# 因存储原理，集合的元素必须是可哈希的值：即：内部通过哈希函数把值转换成一个数字
name = '我不是'
v = hash(name)
print(v)

# 集合内部的元素查找速度相当快

'''
类型      是否可变    是否有序    元素要求    是否可以哈希      转换          定义空
list        是           是       无           否           list(其它)      v=[]或v=list()
tuple       否           是       无           是           tuple(其它)     v = ()/v=tuple()
set         是           狗       可哈希        否           set(其它)       v=set()
'''
# 由于True和False本质上存储的是1和0，而集合又不允许重复，所以在整数0、1和False、True会有如下现象
v1={True,1}
print(v1)   # {True}

v1={1,True}
print(v1)   # {1}

v1={0,False}
print(v1)   # {0}

v1={False,0}
print(v1)   # {False}







